package com.uchengwang.ui.cm_ui.rychat.msgtype;

import android.os.Parcel;
import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.UnsupportedEncodingException;

import io.rong.common.ParcelUtils;
import io.rong.imlib.MessageTag;
import io.rong.imlib.model.MessageContent;

/**
 * Created by U城网 on 2017/10/20.
 * 发送自定义的大表情
 */
@MessageTag(value = "UC:BigMsg", flag = MessageTag.ISCOUNTED | MessageTag.ISPERSISTED)

public class BigEmoMessage extends MessageContent {
    //自定义的属性
    private String bigName;//消息名
    private String bigCodeId;//消息身份编码

    public BigEmoMessage(){}

    /*
    *
    * 实现 encode() 方法，该方法的功能是将消息属性封装成 json 串，
    * 再将 json 串转成 byte 数组，该方法会在发消息时调用，如下面示例代码：
    * */
    @Override
    public byte[] encode() {
        JSONObject jsonObj = new JSONObject();

        try {
            jsonObj.put("bigName", this.getBigName());
            jsonObj.put("bigCodeId",this.getBigCodeId());

        } catch (JSONException e) {
            Log.e("JSONException", e.getMessage());
        }

        try {
            return jsonObj.toString().getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    /*
    * 覆盖父类的 MessageContent(byte[] data) 构造方法，该方法将对收到的消息进行解析，
    * 先由 byte 转成 json 字符串，再将 json 中内容取出赋值给消息属性。
    * */
    public BigEmoMessage(byte[] data) {
        String jsonStr = null;

        try {
            jsonStr = new String(data, "UTF-8");
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }

        try {
            JSONObject jsonObj = new JSONObject(jsonStr);

            if (jsonObj.has("bigName"))
                setBigName(jsonObj.optString("bigName"));

            if (jsonObj.has("bigCodeId"))
                setBigCodeId(jsonObj.optString("bigCodeId"));

        } catch (JSONException e) {
            Log.d("JSONException", e.getMessage());
        }
    }

    //给消息赋值。
    public BigEmoMessage(Parcel in) {
        setBigName(ParcelUtils.readFromParcel(in));//该类为工具类，消息属性
        //这里可继续增加你消息的属性
        setBigCodeId(ParcelUtils.readFromParcel(in));//该类为工具类，消息属性
    }

    /**
     * 读取接口，目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。
     */
    public static final Creator<BigEmoMessage> CREATOR = new Creator<BigEmoMessage>() {

        @Override
        public BigEmoMessage createFromParcel(Parcel source) {
            return new BigEmoMessage(source);
        }

        @Override
        public BigEmoMessage[] newArray(int size) {
            return new BigEmoMessage[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 将类的数据写入外部提供的 Parcel 中。
     * @param dest  对象被写入的 Parcel。
     * @param flags 对象如何被写入的附加标志。
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        ParcelUtils.writeToParcel(dest, getBigName());
        ParcelUtils.writeToParcel(dest, getBigCodeId());
    }

    public String getBigName() {
        return bigName;
    }

    public void setBigName(String bigName) {
        this.bigName = bigName;
    }

    public String getBigCodeId() {
        return bigCodeId;
    }

    public void setBigCodeId(String bigCodeId) {
        this.bigCodeId = bigCodeId;
    }

}
